#ifndef QUERYTODOSLOSACCIDENTES_H_
#define QUERYTODOSLOSACCIDENTES_H_

#include "Query.h"

class QueryTodosLosAccidentes : public Query{
public:
	QueryTodosLosAccidentes(){};
	virtual ~QueryTodosLosAccidentes(){};

	void execute(ArbolUB<DIMENSION_CLAVES, CANTIDAD_BITS_CLAVES>& arbol, ParametroQuery* parametroQuery, std::string archivoSalida){
		std::cout << "Query Todas Los Accidentes " << archivoSalida << std::endl;
		std::ofstream arch;
		arch.open(archivoSalida);
		if (!arch.good()){
			std::cout << "No se pudo abrir archivo " << archivoSalida << std::endl;
			return;
		}

    	Mapeador* mapeador = Mapeador::getInstance();

	    Point<DIMENSION_CLAVES>* min = parametroQuery->getMin();
	    Point<DIMENSION_CLAVES>* max = parametroQuery->getMax();

	    IteradorUB<DIMENSION_CLAVES, CANTIDAD_BITS_CLAVES> iterador(arbol, *min, *max);
	    std::set<std::string> accidentes;

	    auto func = [&accidentes, &mapeador](Point<DIMENSION_CLAVES> point){ accidentes.insert( mapeador->mapIdToString(point[3]) ); };
        iterador.start(func);

	    for (auto it = accidentes.begin(); it != accidentes.end(); ++it)
	    	arch << *it << std::endl;

	    arch.close();
	}

};

#endif /*QUERYTODOSLOSACCIDENTES_H_*/
